package com.banana.springcloud.service;

import com.banana.springcloud.service.fallback.OpenFeignOrderFallbackService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * FeignClient注解中的value属性指定了要调用的{服务}名
 * @author layman
 * @date 2021/1/18
 * fallback为value指定的服务名，提供统一的服务降级处理类OpenFeignOrderFallbackService。
 *      如果正常访问，不会走fallback指定的OpenFeignOrderFallbackService类，而是直接访问。
 *      如果异常访问，需要服务降级，才会走fallback指定的OpenFeignOrderFallbackService。
 *          A:如果是feignSuccess方法出现异常，那么就会去OpenFeignOrderFallbackService.class找对应的feignSuccess方法，处理fallback
 */
@Component
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",fallback = OpenFeignOrderFallbackService.class)
public interface OpenFeignOrderService {

    /**
     * 模拟成功访问
     * @param id：主键
     * @return CommonResult<Payment>
     */
    @GetMapping(value = "/payment/hystrix/success/{id}")
    String feignSuccess(@PathVariable("id") Long id);
    /**
     * 模拟openFeign访问超时
     * @param id：主键
     * @return String
     */
    @GetMapping("/payment/hystrix/timeout/{id}")
    String feignTimeout(@PathVariable("id") Long id);
}
